home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 3 / DISK2032.ZIP / GWDWDEMO.C < prev    next >
C/C++ Source or Header  |  1990-09-01  |  6KB  |  214 lines

  1. /*--------------------------------------------------------------
  2.  *  File:           GWDWDEMO.C
  3.  *  Description:    Program to demonstrate the window functions
  4.  *                  described in chapter 3 of the MPLUS Graphic
  5.  *                  Interface Library.
  6.  *
  7.  *  Copyright (c) 1989  Michael Yam
  8.  *-------------------------------------------------------------*/
  9. #include <math.h>
  10. #include <graph.h>
  11. #include <stdio.h>
  12. #include "gscreen.h"
  13. #include "gplus.h"
  14.  
  15. /*--------------------------------------------------------------
  16.  *  Function Prototypes
  17.  *--------------------------------------------------------------*/
  18. void setaxis( GWDW *gwptr );
  19. void sinplot( double range1, double range2, short xpixels, int ysf );
  20. void cosplot( double range1, double range2, short xpixels, int ysf );
  21.  
  22. /*--------------------------------------------------------------
  23.  *  Function:       main
  24.  *  Description:    opens 3 windows, plots some sine and cosine
  25.  *                  waves, and demonstrates most of the MPLUS
  26.  *                  graphic window functions.
  27.  *  Return value:   0 returned to parent process.
  28.  *--------------------------------------------------------------*/
  29. main()
  30. {
  31.     int i;
  32.     char buffer[80];
  33.     short x1, y1, x2, y2;
  34.     word xo,yo;
  35.     double pi;
  36.     GWDW *groot;
  37.     GWDW *gwptr1;
  38.     GWDW *gwptr2;
  39.  
  40.     if( setvideomode( _ERESCOLOR ) == 0 )
  41.     {
  42.         printf("\nProgram requires EGA mode\n");
  43.         exit(1);
  44.     }
  45.     mpwordwrap(1);
  46.  
  47.     x1 = 50;
  48.     y1 = 20;
  49.     x2 = 550;
  50.     y2 = 340;
  51.     pi = 3.141592654;
  52.  
  53.     groot = grootopen( x1, y1, x2, y2, _GBORDER, BLUE, WHITE );
  54.  
  55.     /*      Draw axis in black.  Set origin to center of window.
  56.      */
  57.     _setcolor( BLACK );
  58.     setaxis( groot );
  59.  
  60.     /*      Draw sine wave in red.
  61.      */
  62.     _setcolor( RED );
  63.     sinplot( -2*pi, 2*pi, x2-x1, 100 );
  64.     _settextposition( 20, 1 );
  65.     outtext( "y = sin(x)", RED, -1 );
  66.  
  67.     /*      Draw cosine wave in blue.
  68.      */
  69.     _setcolor( BLUE );
  70.     cosplot( -2*pi, 2*pi, x2-x1, 100 );
  71.     _settextposition( 21, 1 );
  72.     outtext( "y = cos(x)", BLUE, -1 );
  73.  
  74.     getch();
  75.  
  76.     gwptr1 = gwdwopen( 250, 100, 600, 300, _GBORDER, GREEN, BLACK );
  77.     _setcolor( LIGHTYELLOW );
  78.     setaxis( gwptr1 );
  79.  
  80.     gwptr2 = gwdwtopen( 5, 1, 15, 31, _GBORDER, MAGENTA, LIGHTYELLOW );
  81.     outtext( "Press a key to draw y=sin(x)\n", MAGENTA, -1 );
  82.     getch();
  83.  
  84.     gwdwsetactv( gwptr1 );
  85.     _setcolor( RED );
  86.     sinplot( -2*pi, 2*pi, 600-250, 50 );
  87.     _settextposition( 1, 1 );
  88.     outtext( "y = sin(x)", RED, -1 );
  89.  
  90.     gwdwsetactv( gwptr2 );
  91.     outtext( "Press a key to draw y=cos(x)\n", MAGENTA, -1 );
  92.     getch();
  93.  
  94.     gwdwsetactv( gwptr1 );
  95.     _setcolor( BLUE );
  96.     cosplot( -2*pi, 2*pi, 600-250, 50 );
  97.     _settextposition( 2, 1 );
  98.     outtext( "y = cos(x)", BLUE, -1 );
  99.  
  100.     gwdwsetactv( gwptr2 );
  101.     for( i=0; i<20; ++i )
  102.     {
  103.         sprintf(buffer, "\nThis is line %d", i );
  104.         outtext( buffer, MAGENTA, -1 );
  105.     }
  106.     outtext( "\nPress a key to clear this window...", MAGENTA, -1 );
  107.     getch();
  108.     gwdwclr( gwptr2 );
  109.     outtext( "Press a key to close window at right", MAGENTA, -1 );
  110.     getch();
  111.     gwdwclose( gwptr1 );
  112.     gwdwclr( gwptr2 );
  113.     outtext( "Press a key to close this window.", MAGENTA, -1 );
  114.     getch();
  115.     gwdwclose( gwptr2 );
  116.     getch();
  117.     grootclose( groot );
  118.     setvideomode( _DEFAULTMODE );
  119.     return 0;
  120. }
  121. /*--------------------------------------------------------------
  122.  *  Function:       sinplot
  123.  *  Description:    plot a sine wave
  124.  *  Return value:   none
  125.  *--------------------------------------------------------------*/
  126. void sinplot( range1, range2, xpixels, ysf )
  127. double range1;
  128. double range2;
  129. short xpixels;                  /* x pixels available */
  130. int ysf;                        /* y scale factor */
  131. {
  132.     int i;
  133.     double numperxpix;
  134.     double xpixpernum;
  135.     double x, y;
  136.  
  137.     numperxpix = (fabs(range2-range1))/(double)xpixels;
  138.     xpixpernum = 1/numperxpix;
  139.  
  140.     /*      Calculate first point.  Position cursor with _moveto.
  141.      *      Adjust sign for y axis.
  142.      */
  143.     x = range1;
  144.     y = sin( x );
  145.     _moveto( (short)(range1/numperxpix), (short)(-( y*ysf )) );
  146.  
  147.     for( i=1; i<xpixels; ++i)
  148.     {
  149.         x += numperxpix;
  150.         y = sin( x );
  151.         _lineto( (short)(x * xpixpernum), (short)(-(y*ysf)) );
  152.     }
  153. }
  154. /*--------------------------------------------------------------
  155.  *  Function:       cosplot
  156.  *  Description:    plot a cosine wave
  157.  *  Return value:   none
  158.  *--------------------------------------------------------------*/
  159. void cosplot( range1, range2, xpixels, ysf )
  160. double range1;
  161. double range2;
  162. short xpixels;                  /* x pixels available */
  163. int ysf;                        /* y scale factor */
  164. {
  165.     int i;
  166.     double numperxpix;
  167.     double xpixpernum;
  168.     double x, y;
  169.  
  170.     numperxpix = (fabs(range2-range1))/(double)xpixels;
  171.     xpixpernum = 1/numperxpix;
  172.  
  173.     /*      Calculate first point.  Position cursor with _moveto.
  174.      *      Adjust sign for y axis.
  175.      */
  176.     x = range1;
  177.     y = cos( x );
  178.     _moveto( (short)(range1/numperxpix), (short)(-(y*ysf)) );
  179.  
  180.     for( i=1; i<xpixels; ++i)
  181.     {
  182.         x += numperxpix;
  183.         y = cos( x );
  184.         _lineto( (short)(x*xpixpernum), (short)(-(y*ysf)) );
  185.     }
  186. }
  187. /*--------------------------------------------------------------
  188.  *  Function:       setaxis
  189.  *  Description:    draw axis and set logical origin to center
  190.  *                  of screen.
  191.  *  Return value:   none
  192.  *--------------------------------------------------------------*/
  193. void setaxis( gwptr )
  194. GWDW *gwptr;
  195. {
  196.     word x,y;
  197.     short xctr, yctr;
  198.  
  199.     xctr = (gwptr->x2-gwptr->x1)/2;
  200.     yctr = (gwptr->y2-gwptr->y1)/2;
  201.  
  202.     _moveto( xctr, 0 );
  203.     _lineto( xctr, gwptr->y2-gwptr->y1 );
  204.     _moveto( 0, yctr );
  205.     _lineto( gwptr->x2-gwptr->x1, yctr );
  206.  
  207.     gwdwsetorg( gwptr, xctr, yctr );
  208. }
  209. /*-------------------------------------------------------------*
  210.  *                  End of GWDWDEMO.C                          *
  211.  *-------------------------------------------------------------*/
  212.  
  213.  
  214.